import img from './assets/column.jpg';
import { ColumnProps, ImageProps, UserInfo } from './store/store';

// 文件规则
interface CheckCondittion {
  // 格式
  format?: string[]
  // 大小
  size?: number
}
type ErrorTypr = 'size' | 'format' | null
// 验证文件的格式 大小
export function beforeUploadCheck(file: File, condition: CheckCondittion){
  const { format, size} = condition
  // 包不包含文件类型
  const isValidFormat = format ? format.includes(file.type) : true
  // 判断大小 先转换为兆（m）
  const isValidSize = size ? (file.size / 1024 / 1024) < size : true
  let error: ErrorTypr = null
  if (!isValidFormat) {
    error = 'format'
  }
  if (!isValidSize) {
    error = 'size'
  }
  return {
    passed: isValidFormat && isValidSize,
    error
  }
}
// 设置图片格式
export function generateFitUrl(data: ImageProps, width: number, height: number, format = ['m_pad']) {
  if (data && data.url) {
    const formatStr = format.reduce((prev, current) => {
      return current + ',' + prev
    }, '')
    data.fitUrl = data.url + `?x-oss-process=image/resize,${formatStr}h_${height},w_${width}`
    
  }
  return data
}
// 如果有图片改变图片格式 没图片就添加默认图片
export function addColumnAvatar(data: ColumnProps | UserInfo, width: number, height: number) {
  if (data) {
    if (data.avatar) {
      generateFitUrl(data.avatar, width, height)
    } else {
      data.avatar = {
        fitUrl: img
      }
    }
  }
}
// 处理state的数据类型
// 数组转对象  <T extends {_id?: string} 约束泛型
export const arrToObj = <T extends {_id?: string}>(arr: Array<T>) => {
  // prev 为累计的值 current当前的值，在这里prev 为 { }
  return arr.reduce((prev, current) => {
    if (current._id) {
      prev[current._id] = current
    }
    return prev
  }, {} as { [key: string]: T})
}
// 对象转数组
export const ObjToArr = <T>(obj: {[key: string]: T }) => {
  // Object.keys 返回对象 key 的数组
  // console.log(obj);
  
  return Object.keys(obj).map(key => obj[key])
}